package com.lnsoft.cac.server.handle.codec.frameMessage;


import io.netty.buffer.ByteBuf;
import io.netty.buffer.Unpooled;
import lombok.Data;
import lombok.NonNull;

@Data
/**
 * 通信流量数据报-数据流量上送报文
 * */
public class FlowData_Msg {
    private int StatTime;       //4byte     采集时间（采用世纪秒表示）
    private int Send_Flow;      //4byte     当月发送流量（无符号整数，单位：字节）
    private int Receive_Flow;   //4byte     当月接收流量（无符号整数，单位：字节）

    public ByteBuf toByteBuf() throws Exception{
        if (!Util.statTimeIsAvailable(StatTime)) {
            throw new Exception("采集时间 设置异常");
        }

        ByteBuf bf = Unpooled.buffer(12);
        bf.writeIntLE(StatTime);
        bf.writeIntLE(Send_Flow);
        bf.writeIntLE(Receive_Flow);
        return bf;
    }


    //  解析 [数据流量上送报文] 帧报文内容区 到消息体中
    public static FlowData_Msg decFrameBody(@NonNull byte[] frameBody) throws Exception {
        ByteBuf bf = Unpooled.wrappedBuffer(frameBody);
        FlowData_Msg msg = new FlowData_Msg();
        int len = frameBody.length;
        if (len == 0) {
            return null;
        }
        if (12 != len) {
            throw new Exception("frameBody 数据异常");
        }
        msg.setStatTime(bf.getIntLE(0) & 0xFFFFFFFF);
        msg.setSend_Flow(bf.getIntLE(4) & 0xFFFFFFFF);
        msg.setReceive_Flow(bf.getIntLE(8) & 0xFFFFFFFF);
        return msg;
    }
}
